]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
[linearView] Fix dnd to dash when zoomed out
authorFlorian Müllner <fmuellner@src.gnome.org>
Thu, 20 May 2010 14:13:27 +0000 (16:13 +0200)
committerFlorian Müllner <fmuellner@src.gnome.org>
Thu, 27 May 2010 10:12:10 +0000 (12:12 +0200)
While zoomed out, the workspaces view's drop target spans the entire
monitor to implement reactive screen edges. When a drop event is not
handled by the view, an attempt is made to pass it on down the stack,
but it doesn't work properly. Fix it by iterating the target's parents
as well.
Also improve the code which translates dnd coordinates to target
positions.

https://bugzilla.gnome.org/show_bug.cgi?id=619203

js/ui/dnd.js
js/ui/workspacesView.js

index d27aa49d0462928eff28c43ec082b6ffdc854fd1..dad1cd0225c14924fc20d52d3e90e56a3ebfbdcd 100644 (file)
@@ -302,13 +302,14 @@ _Draggable.prototype = {
             this._dragActor.show();
             while (target) {
                 if (target._delegate && target._delegate.handleDragOver) {
-                    let [targX, targY] = target.get_transformed_position();
+                    let [r, targX, targY] = target.transform_stage_point(stageX, stageY);
                     // We currently loop through all parents on drag-over even if one of the children has handled it.
                     // We can check the return value of the function and break the loop if it's true if we don't want
                     // to continue checking the parents.
-                    target._delegate.handleDragOver(this.actor._delegate, this._dragActor,
-                                                    (stageX - targX) / target.scale_x,
-                                                    (stageY - targY) / target.scale_y,
+                    target._delegate.handleDragOver(this.actor._delegate,
+                                                    this._dragActor,
+                                                    targX,
+                                                    targY,
                                                     event.get_time());
                 }
                 target = target.get_parent();
@@ -328,10 +329,11 @@ _Draggable.prototype = {
         this._dragActor.show();
         while (target) {
             if (target._delegate && target._delegate.acceptDrop) {
-                let [targX, targY] = target.get_transformed_position();
-                if (target._delegate.acceptDrop(this.actor._delegate, this._dragActor,
-                                                (dropX - targX) / target.scale_x,
-                                                (dropY - targY) / target.scale_y,
+                let [r, targX, targY] = target.transform_stage_point(dropX, dropY);
+                if (target._delegate.acceptDrop(this.actor._delegate,
+                                                this._dragActor,
+                                                targX,
+                                                targY,
                                                 event.get_time())) {
                     // If it accepted the drop without taking the actor,
                     // handle it ourselves.
index cf8882bdd2149e4d57f05e6bc16f8ab14f5f7ce1..b4b20586e3ff1d049adf520083715cc7c356d171 100644 (file)
@@ -1136,12 +1136,16 @@ SingleView.prototype = {
             let target = global.stage.get_actor_at_pos(Clutter.PickMode.ALL, x, y);
             dropActor.show();
 
-            if (target._delegate && target._delegate != this && target._delegate.acceptDrop) {
-                let [targX, targY] = target.get_transformed_position();
-                return target._delegate.acceptDrop(source, dropActor,
-                                                   (x - targX) / target.scale_x,
-                                                   (y - targY) / target.scale_y,
-                                                   time);
+            while (target) {
+                if (target._delegate &&
+                    target._delegate != this &&
+                    target._delegate.acceptDrop) {
+
+                    let [r, targX, targY] = target.transform_stage_point(x, y);
+                    return target._delegate.acceptDrop(source, dropActor,
+                                                       targX, targY, time);
+                }
+                target = target.get_parent();
             }
             return false;
         }